package com.doubao.wechat.service;

import com.doubao.common.result.Result;
import com.doubao.wechat.dto.request.WxPayOrderRequest;
import com.doubao.wechat.entity.PaymentOrder;

import java.util.List;

/**
 * 支付订单服务接口
 */
public interface PaymentOrderService {

    /**
     * 创建支付订单
     *
     * @param userId 用户ID
     * @param productId 商品/套餐ID
     * @param amount 支付金额（单位：分）
     * @param subject 商品标题
     * @param body 商品描述
     * @param payChannel 支付渠道
     * @param payType 支付类型
     * @param attach 附加数据
     * @param clientIp 客户端IP
     * @return 支付订单
     */
    Result<PaymentOrder> createOrder(Long userId, Long productId, Integer amount,
                                     String subject, String body, String payChannel,
                                     String payType, String attach, String clientIp);

    /**
     * 更新支付订单状态
     *
     * @param outTradeNo 商户订单号
     * @param status 订单状态
     * @param tradeNo 第三方交易号
     * @return 更新结果
     */
    Result<Void> updateOrderStatus(String outTradeNo, String status, String tradeNo);

    /**
     * 查询支付订单
     *
     * @param outTradeNo 商户订单号
     * @return 支付订单
     */
    Result<PaymentOrder> getOrderByOutTradeNo(String outTradeNo);

    /**
     * 查询用户的支付订单列表
     *
     * @param userId 用户ID
     * @param status 订单状态，可为null查询全部
     * @return 支付订单列表
     */
    Result<List<PaymentOrder>> getUserOrders(Long userId, String status);

    /**
     * 关闭支付订单
     *
     * @param outTradeNo 商户订单号
     * @return 关闭结果
     */
    Result<Void> closeOrder(String outTradeNo);

    /**
     * 处理订单过期
     *
     * @param outTradeNo 商户订单号
     * @return 处理结果
     */
    Result<Void> handleOrderExpire(String outTradeNo);

    /**
     * 创建微信支付参数
     *
     * @param paymentOrder 支付订单
     * @param openid 用户openid
     * @return 微信支付创建请求
     */
    WxPayOrderRequest createWxPayRequest(PaymentOrder paymentOrder, String openid);
}